﻿<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:converters="clr-namespace:MahApps.Metro.Converters">

    <!-- =============================================================================== -->
    <!-- Metro styled TreeView                                                           -->
    <!-- =============================================================================== -->

    <Style x:Key="ExpandCollapseToggleStyle"
           TargetType="{x:Type ToggleButton}">
        <Setter Property="Focusable"
                Value="False" />
        <Setter Property="Width"
                Value="16" />
        <Setter Property="Height"
                Value="16" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <Grid Background="Transparent"
                          Height="16"
                          Width="16">
                        <Path x:Name="ExpandPath"
                              HorizontalAlignment="Center"
                              VerticalAlignment="Center"
                              Data="M 4 0 L 8 4 L 4 8 Z"
                              Fill="Transparent"
                              StrokeThickness="1"
                              Stroke="{DynamicResource BlackBrush}" />
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked"
                                 Value="True">
                            <Setter Property="RenderTransform"
                                    TargetName="ExpandPath">
                                <Setter.Value>
                                    <RotateTransform Angle="45"
                                                     CenterY="4"
                                                     CenterX="4" />
                                </Setter.Value>
                            </Setter>
                            <Setter Property="Fill"
                                    TargetName="ExpandPath"
                                    Value="{DynamicResource BlackBrush}" />
                            <Setter Property="Stroke"
                                    TargetName="ExpandPath"
                                    Value="{DynamicResource BlackBrush}" />
                        </Trigger>
                        <Trigger Property="IsEnabled"
                                 Value="False">
                            <Setter Property="Stroke"
                                    TargetName="ExpandPath"
                                    Value="{DynamicResource GrayBrush5}" />
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsEnabled"
                                           Value="False" />
                                <Condition Property="IsChecked"
                                           Value="True" />
                            </MultiTrigger.Conditions>
                            <Setter Property="Fill"
                                    TargetName="ExpandPath"
                                    Value="{DynamicResource GrayBrush5}" />
                            <Setter Property="Stroke"
                                    TargetName="ExpandPath"
                                    Value="{DynamicResource GrayBrush5}" />
                        </MultiTrigger>
                        <Trigger Property="IsMouseOver"
                                 Value="True">
                            <Setter Property="Stroke"
                                    TargetName="ExpandPath"
                                    Value="{DynamicResource AccentColorBrush}" />
                            <Setter Property="Fill"
                                    TargetName="ExpandPath"
                                    Value="{DynamicResource AccentColorBrush}" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="TreeViewItemFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border>
                        <Rectangle Margin="0,0,0,0"
                                   StrokeThickness="5"
                                   Stroke="Black"
                                   StrokeDashArray="1 2"
                                   Opacity="0" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <converters:TreeViewMarginConverter Length="12"
                                        x:Key="LengthConverter" />

    <Style x:Key="MetroTreeViewItem"
           TargetType="{x:Type TreeViewItem}">
        <Setter Property="MinHeight"
                Value="25" />
        <Setter Property="Foreground"
                Value="{DynamicResource BlackBrush}" />
        <Setter Property="Background"
                Value="{DynamicResource WhiteBrush}" />
        <Setter Property="FocusVisualStyle"
                Value="{StaticResource TreeViewItemFocusVisual}" />
        <Setter Property="SnapsToDevicePixels"
                Value="True" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TreeViewItem}">
                    <StackPanel>
                        <Border x:Name="Border"
                                Background="{TemplateBinding Background}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                Padding="{TemplateBinding Padding}"
                                MinHeight="{TemplateBinding MinHeight}"
                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
                            <Grid Margin="{Binding Converter={StaticResource LengthConverter}, RelativeSource={x:Static RelativeSource.TemplatedParent}}"
                                  VerticalAlignment="Stretch">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="19" />
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <ToggleButton x:Name="Expander"
                                              Style="{StaticResource ExpandCollapseToggleStyle}"
                                              IsChecked="{Binding Path=IsExpanded, RelativeSource={x:Static RelativeSource.TemplatedParent}, Mode=TwoWay}"
                                              ClickMode="Press" />

                                <ContentPresenter x:Name="PART_Header"
                                                  Grid.Column="1"
                                                  ContentSource="Header"
                                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                            </Grid>
                        </Border>
                        <ItemsPresenter x:Name="ItemsHost">
                            <ItemsPresenter.LayoutTransform>
                                <ScaleTransform ScaleY="1" />
                            </ItemsPresenter.LayoutTransform>
                        </ItemsPresenter>
                    </StackPanel>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsExpanded"
                                 Value="False">
                            <Setter TargetName="ItemsHost"
                                    Property="Visibility"
                                    Value="Collapsed" />
                        </Trigger>

                        <Trigger Property="HasItems"
                                 Value="False">
                            <Setter TargetName="Expander"
                                    Property="Visibility"
                                    Value="Hidden" />
                        </Trigger>

                        <Trigger SourceName="Border"
                                 Property="IsMouseOver"
                                 Value="True">
                            <Setter TargetName="Border"
                                    Property="Background"
                                    Value="{DynamicResource AccentColorBrush3}" />
                            <Setter Property="Foreground"
                                    Value="{DynamicResource BlackColorBrush}" />
                        </Trigger>
                        <Trigger Property="IsSelected"
                                 Value="True">
                            <Setter TargetName="Border"
                                    Property="Background"
                                    Value="{DynamicResource AccentColorBrush}" />
                            <Setter Property="Foreground"
                                    Value="{DynamicResource AccentSelectedColorBrush}" />
                        </Trigger>
                        <Trigger Property="IsEnabled"
                                 Value="False">
                            <Setter Property="Foreground"
                                    Value="{DynamicResource GrayBrush7}" />
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsEnabled"
                                           Value="False" />
                                <Condition Property="IsSelected"
                                           Value="True" />
                            </MultiTrigger.Conditions>
                            <MultiTrigger.Setters>
                                <Setter TargetName="Border"
                                        Property="Background"
                                        Value="{DynamicResource GrayBrush7}" />
                                <Setter Property="Foreground"
                                        Value="{DynamicResource AccentSelectedColorBrush}" />
                            </MultiTrigger.Setters>
                        </MultiTrigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsSelected"
                                           Value="True" />
                                <Condition Property="Selector.IsSelectionActive"
                                           Value="True" />
                            </MultiTrigger.Conditions>
                            <Setter TargetName="Border"
                                    Property="Background"
                                    Value="{DynamicResource AccentColorBrush2}" />
                        </MultiTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="MetroTreeView"
           TargetType="{x:Type TreeView}">
        <Setter Property="BorderBrush"
                Value="{DynamicResource BlackBrush}" />
        <Setter Property="Background"
                Value="{DynamicResource WhiteBrush}" />
        <!-- default to 0 -->
        <Setter Property="BorderThickness"
                Value="0" />
        <Setter Property="SnapsToDevicePixels"
                Value="True" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TreeView}">
                    <Border Name="Border"
                            Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <ScrollViewer>
                            <ItemsPresenter />
                        </ScrollViewer>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled"
                                 Value="False">
                            <Setter TargetName="Border"
                                    Property="BorderBrush"
                                    Value="{DynamicResource GrayBrush9}" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="ItemContainerStyle"
                Value="{StaticResource MetroTreeViewItem}" />
    </Style>

    <Style TargetType="{x:Type TreeView}"
           BasedOn="{StaticResource MetroTreeView}" />
    <Style TargetType="{x:Type TreeViewItem}"
           BasedOn="{StaticResource MetroTreeViewItem}" />
</ResourceDictionary>